セキュリティ攻撃 パストラバーサル(ディレクトリトラバーサル)
攻撃から身を守るために意識すべき事
ユーザーからファイルを読み込む・書き込む機能(コード)がある場合は、バリデート処理などを慎重に慎重に行う事
ユーザからファイルを読み込む・書き込む系の機能があるミドルウェアの設定や脆弱性にも気をつける事
ex:webサーバ(nginx, apache)
攻撃の内容
本来アクセスできないディレクトリに存在するファイルに対して、脆弱性を悪用してアクセスする攻撃手法・脆弱性
例
以下のような構成のWebサーバがあったとする
code: dir
.
- www/
- public/
- index.html
- secret/
- secret.key
Webサービスのユーザーは以下のような権限
公開ディレクトリに指定されてるpublicにしかアクセスできない
secretディレクトリにはアクセスできない
この状況でパストラバーサルの脆弱性が存在した場合、secretディレクトリに対してアクセスできる恐れがある。
secretディレクトリに機密情報が置いてると、この脆弱性(パストラ)が原因で情報漏洩につながる事に。
この脆弱性の影響
1.icon個人情報や企業データなどの流出
サーバーに存在するファイルを読み込まれて、そこに情報が入ってたらアウト
エラーログ、アクセスログなどにも個人情報が入ってる可能性があるので注意する事
2.iconサーバー上のデータの書き換え
3.iconクレデンシャル情報の漏えいによる影響の波及
何かしらの認証(クレデンシャル)情報が漏洩したら、その情報を使ってさらに被害が広がる恐れあり
この攻撃が発生するメカニズム
ユーザーからファイルの読み込み・書き込みを行う機能に潜む脆弱性である
発生メカニズムは以下
外部パラメータ、つまりユーザからの入力によって「読み込み・書き込みを行うファイル」を決定する処理があった場合、パラメータに「パス文字」などが入り込むことで、この脆弱性は発現します。
例えば以下のようなコード
code: example.java
String fileName = getRequestParameter("fileName") // ユーザからの入力を取得するようなコード
FileOutputStream fos = new FileOutputStream(new File("./public/" + fileName));
fileNameが普通な感じなら良いのだが...
../secret/sercret.keyなどの値になってると、普通にこのファイルにアクセスされて悪者に読み込まれてしまう。
ディレクトリトラバーサルの対策方法
1.icon..といった相対パスや、ショートカットの特殊ファイル名などを削除し、対象ファイルへのパスを計算する
2.iconファイル操作の際は、計算後のパスが、想定していたパス・ディレクトリ内であるかを検査する
この対策をコード内で行ってないと、トラバーサルの餌食になる
注意.iconここまでの説明だと、パストラバーサルはアプリケーション内の脆弱性だと言う認識になってそうだが違う。ミドルウェアにも存在する脆弱性である。
nginxで有名なパストラバーサル -> セキュリティ攻撃 エイリアストラバーサル
参考
https://yamory.io/blog/about_path_traversal_attack/